From 08daf6e6148eb26cdb939f14f257f26dc763af65 Mon Sep 17 00:00:00 2001 From: "kaf24@firebug.cl.cam.ac.uk" Date: Thu, 14 Jul 2005 10:37:49 +0000 Subject: [PATCH] Allow IRQ balancing to be disabled with 'noirqbalance' boot parameter. Signed-off-by: Keir Fraser --- docs/src/user.tex | 5 +++++ xen/arch/x86/irq.c | 7 ++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/docs/src/user.tex b/docs/src/user.tex index b3a2786979..f15f88a846 100644 --- a/docs/src/user.tex +++ b/docs/src/user.tex @@ -1692,6 +1692,11 @@ editing \path{grub.conf}. \item [watchdog ] Enable NMI watchdog which can report certain failures. +\item [noirqbalance ] + Disable software IRQ balancing and affinity. This can be used on + systems such as Dell 1850/2850 that have workarounds in hardware for + IRQ-routing issues. + \item [badpage=$<$page number$>$,$<$page number$>$, \ldots ] Specify a list of pages not to be allocated for use because they contain bad bytes. For example, if your diff --git a/xen/arch/x86/irq.c b/xen/arch/x86/irq.c index 92b51f7d6e..c46811fd61 100644 --- a/xen/arch/x86/irq.c +++ b/xen/arch/x86/irq.c @@ -6,6 +6,7 @@ */ #include +#include #include #include #include @@ -14,6 +15,10 @@ #include #include +/* opt_noirqbalance: If true, software IRQ balancing/affinity is disabled. */ +static int opt_noirqbalance = 0; +boolean_param("noirqbalance", opt_noirqbalance); + irq_desc_t irq_desc[NR_IRQS]; static void __do_IRQ_guest(int vector); @@ -240,7 +245,7 @@ int pirq_guest_bind(struct vcpu *v, int irq, int will_share) /* Attempt to bind the interrupt target to the correct CPU. */ cpu_set(v->processor, cpumask); - if ( desc->handler->set_affinity != NULL ) + if ( !opt_noirqbalance && (desc->handler->set_affinity != NULL) ) desc->handler->set_affinity(vector, cpumask); } else if ( !will_share || !action->shareable ) -- 2.30.2